﻿#region Copyright Notice
// This file is part of GestionPedago.
// <description>
// Copyright (C) 2012 ENI Ecole Informatique
// 
// GestionPedago is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// 
// <program> is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
#endregion

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;
using System.Windows;

namespace GestionPedago.ViewModel {

    /// <summary>
    /// Classe du menu principal
    /// </summary>
    public class MainMenuVM : BaseViewModel {

        /// <summary>
        /// Fenêtre principale
        /// </summary>
        private MainWindowVM ParentVM { get; set; }

        private ICommand rechercheStagiaireCommand;
        private ICommand rechercheECFCommand;
        private ICommand evenementsPedagogiquesCommand;
        private ICommand creaModEvenementCommand;
        private ICommand creationModificationECFCommand;
        private ICommand planifierECFPromotionCommand;
        private ICommand planifierECFStagiaireCommand;
        private ICommand gererTitresCommand;

        /// <summary>
        /// Constructeur de la classe MainMenuVM
        /// </summary>
        /// <param name="vmmainwindow">Fenêtre principale</param>
        public MainMenuVM(MainWindowVM vmmainwindow) {
            ParentVM = vmmainwindow;
        }

        public ICommand GererTitresCommand {
            get {
                if(this.gererTitresCommand == null)
                    this.gererTitresCommand = new RelayCommand(param => this.OpenGererTitres());

                return this.gererTitresCommand;
            }
        }

        public ICommand RechercheStagiaireCommand {
            get {
                if(this.rechercheStagiaireCommand == null)
                    this.rechercheStagiaireCommand = new RelayCommand(param => this.OpenRechercheStagiaire());

                return this.rechercheStagiaireCommand;
            }
        }

        public ICommand RechercheECFCommand {
            get {
                if(this.rechercheECFCommand == null)
                    this.rechercheECFCommand = new RelayCommand(param => this.OpenRechercheECF());

                return this.rechercheECFCommand;
            }
        }

        public ICommand EvenementsPedagogiquesCommand {
            get {
                if(this.evenementsPedagogiquesCommand == null)
                    this.evenementsPedagogiquesCommand = new RelayCommand(param => this.OpenEvenementsPedagogiques());

                return this.evenementsPedagogiquesCommand;
            }
        }

        public ICommand CreaModEvenementCommand {
            get {
                if(this.creaModEvenementCommand == null) {
                    this.creaModEvenementCommand = new RelayCommand(param => this.OpenCreaModEvenement());
                }
                return this.creaModEvenementCommand;
            }

        }

        public ICommand CreationModificationECFCommand {
            get {
                if(this.creationModificationECFCommand == null)
                    this.creationModificationECFCommand = new RelayCommand(param => this.CreationModificationECF());

                return this.creationModificationECFCommand;
            }
        }

        public ICommand PlanifierECFPromotionCommand {
            get {
                if(this.planifierECFPromotionCommand == null)
                    this.planifierECFPromotionCommand = new RelayCommand(param => this.OpenPlanifierECFPromotion());

                return this.planifierECFPromotionCommand;
            }
        }

        public ICommand PlanifierECFStagiaireCommand {
            get {
                if(this.planifierECFStagiaireCommand == null)
                    this.planifierECFStagiaireCommand = new RelayCommand(param => this.OpenPlanifierECFStagiaire());

                return this.planifierECFStagiaireCommand;
            }
        }

        /// <summary>
        /// Ouverture de l'onglet de gestion des titres
        /// </summary>
        private void OpenGererTitres() {
            GererTitresVM vmGererTitres = new GererTitresVM(ParentVM.vmGestionnaireOnglets);
            ParentVM.vmGestionnaireOnglets.Onglets.Add(vmGererTitres);
            ParentVM.vmGestionnaireOnglets.SelectedOnglet = vmGererTitres;
        }

        /// <summary>
        /// Ouverture de l'onglet de planification des ECF pour le stagiaire sélectionné
        /// </summary>
        private void OpenPlanifierECFStagiaire() {
            if(ParentVM.CurrentStagiaire.CodeStagiaire > 0) {
                PlanifierECFStagiaireVM vmPlanifierECFStagiaire = new PlanifierECFStagiaireVM(ParentVM.vmGestionnaireOnglets);
                ParentVM.vmGestionnaireOnglets.Onglets.Add(vmPlanifierECFStagiaire);
                ParentVM.vmGestionnaireOnglets.SelectedOnglet = vmPlanifierECFStagiaire;
            } else {
                MessageBox.Show("Vous devez sélectionner un stagiaire avant de pourvoir gérer ses ECF.", "Information", MessageBoxButton.OK, MessageBoxImage.Information);
            }
        }

        /// <summary>
        /// Ouverture de l'onglet de planification par promotion
        /// </summary>
        private void OpenPlanifierECFPromotion() {
            PlanifierECFPromotionVM vmPlanifierECFPromotion = new PlanifierECFPromotionVM(ParentVM.vmGestionnaireOnglets);
            ParentVM.vmGestionnaireOnglets.Onglets.Add(vmPlanifierECFPromotion);
            ParentVM.vmGestionnaireOnglets.SelectedOnglet = vmPlanifierECFPromotion;
        }

        /// <summary>
        /// Ouverture de l'onglet de CRUD ECF
        /// </summary>
        private void CreationModificationECF() {
            CreationModificationECFVM vmCreationModificationECF = new CreationModificationECFVM(ParentVM.vmGestionnaireOnglets);
            ParentVM.vmGestionnaireOnglets.Onglets.Add(vmCreationModificationECF);
            ParentVM.vmGestionnaireOnglets.SelectedOnglet = vmCreationModificationECF;
        }


        /// <summary>
        /// Ouverture de l'onglet de recherche de stagiaires
        /// </summary>
        private void OpenRechercheStagiaire() {
            RechercheStagiaireVM vmRechercheStagiaire = new RechercheStagiaireVM(ParentVM.vmGestionnaireOnglets);
            ParentVM.vmGestionnaireOnglets.Onglets.Add(vmRechercheStagiaire);
            ParentVM.vmGestionnaireOnglets.SelectedOnglet = vmRechercheStagiaire;
        }

        /// <summary>
        /// Ouverture de l'onglet de recherche d'ECF
        /// </summary>
        private void OpenRechercheECF() {
            RechercheECFVM vmRechercheECF = new RechercheECFVM(ParentVM.vmGestionnaireOnglets);
            ParentVM.vmGestionnaireOnglets.Onglets.Add(vmRechercheECF);
            ParentVM.vmGestionnaireOnglets.SelectedOnglet = vmRechercheECF;
        }


        /// <summary>
        /// Ouverture de l'onglet de gestion des évenements pédagogiques
        /// </summary>
        private void OpenEvenementsPedagogiques() {
            EvenementsPedagogiquesVM vmEvenementsPedagogiques = new EvenementsPedagogiquesVM(ParentVM.vmGestionnaireOnglets);
            ParentVM.vmGestionnaireOnglets.Onglets.Add(vmEvenementsPedagogiques);
            ParentVM.vmGestionnaireOnglets.SelectedOnglet = vmEvenementsPedagogiques;
        }

        private void OpenCreaModEvenement() {
            if(this.ParentVM.CurrentStagiaire.CodeStagiaire == 0) {
                MessageBox.Show("Pour créer un évènement, veuillez d'abord sélectionner un stagiaire.", "Information", MessageBoxButton.OK, MessageBoxImage.Information);
            } else {
                CreaModEvenementPedagogiqueVM vmCreaModEvenementPedagogique = new CreaModEvenementPedagogiqueVM(ParentVM.vmGestionnaireOnglets);
                ParentVM.vmGestionnaireOnglets.Onglets.Add(vmCreaModEvenementPedagogique);
                ParentVM.vmGestionnaireOnglets.SelectedOnglet = vmCreaModEvenementPedagogique;
            }
        }
    }

}
